wayland: Make gdk_wayland_device_get_focus() work on touch
authorCarlos Garnacho <carlosg@gnome.org>
Wed, 9 Dec 2015 11:42:33 +0000 (12:42 +0100)
committerCarlos Garnacho <carlosg@gnome.org>
Mon, 14 Dec 2015 23:40:21 +0000 (00:40 +0100)
So we can figure out the focus for the master device.

https://bugzilla.gnome.org/show_bug.cgi?id=759309

gdk/wayland/gdkdevice-wayland.c

index fbff72ba1bb655bacd8fa950155dcad78f1a055d..baf40bfb653daee9575ac93174ba5437a997039e 100644 (file)
@@ -488,12 +488,17 @@ device_emit_grab_crossing (GdkDevice       *device,
 static GdkWindow *
 gdk_wayland_device_get_focus (GdkDevice *device)
 {
-  GdkWaylandDeviceData *wayland_device = GDK_WAYLAND_DEVICE (device)->device;
-
-  if (gdk_device_get_source (device) == GDK_SOURCE_KEYBOARD)
-    return wayland_device->keyboard_focus;
+  GdkWaylandSeat *wayland_seat = GDK_WAYLAND_DEVICE (device)->device;
+
+  if (device == wayland_seat->master_keyboard)
+    return wayland_seat->keyboard_focus;
+  else if (device == wayland_seat->master_pointer)
+    return wayland_seat->pointer_focus;
+  else if (device == wayland_seat->touch_master &&
+           GDK_WAYLAND_DEVICE(device)->emulating_touch)
+    return GDK_WAYLAND_DEVICE(device)->emulating_touch->window;
   else
-    return wayland_device->pointer_focus;
+    return NULL;
 }
 
 static GdkGrabStatus